package actions;


import java.awt.MenuItem;
import java.net.URL;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

import utils.Constants;
import client_gui.ClientWindow;


/**
 * Klasa koja predtavlja apstraktnu akciju. Iz ove klase se izvode klase koje predstavljaju
 * konkretne akcije.
 * 
 * @author UrosKrkic & Radivoje Popovic
 */
public abstract class RLMAbstractAction extends AbstractAction implements Constants {

	/**
	 * Vlasnik akcije - action owner.
	 */
	private ClientWindow owner;
	
	private MenuItem item;
	
	/**
	 * Kreira ikonu na osnovu naziva fajla zadatog relativno u odnosu na ovu klasu
	 * @param fileName Naziv fajla slike sa relativnom putanjom
	 * @return Icon - icon
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public Icon loadIcon(String fileName){
		URL imageURL = getClass().getResource(fileName);
		Icon icon = null;
		
		if (imageURL != null) {                      
	        icon = new ImageIcon(imageURL);
	    }
		else {                                     
	        System.err.println("Resource not found: " + fileName);
	    }
		
		return icon;
	}
	
	
	/**
	 * Metoda setuje vlasnike akcije.
	 * @param theForm - vlasnik akcije
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public void setActionOwner(ClientWindow owner) {
		this.owner = owner;
	}
	
	
	/**
	 * Metoda vraca vlasnika akcije.
	 * @return StandardForm - action owner
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public ClientWindow getActionOwner() {
		return this.owner;
	}
	
	
	/**
	 * Metoda prikazuje JOptionPane dialog sa greskom.
	 * @param error - opis greske
	 * @author UrosKrkic & Radivoje Popovic
	 */
	protected void showError(String error) {
		JOptionPane.showMessageDialog(owner, error, "Greska", JOptionPane.ERROR_MESSAGE);
	}
	
	
	public void setActionItem() {
		item = new MenuItem((String) this.getValue(Action.NAME));
		
		item.addActionListener(this);
	}
	
	
	@Override
	public void setEnabled(boolean newValue) {
		super.setEnabled(newValue);
		
		if (item != null)
			item.setEnabled(newValue);
	}

	
	public MenuItem getItem() {
		return this.item;
	}
	
}
